package com.ljd.music.controller;

import com.alibaba.fastjson.JSONObject;
import com.ljd.music.pojo.Singer;
import com.ljd.music.service.SingerService;
import com.ljd.music.util.Consts;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/singer")
public class SingerController {

    @Autowired
    private SingerService singerService;


    // 添加歌手
    @PostMapping("add")
    public Object addSinger(Singer singer) {
        JSONObject jsonObject = new JSONObject();



        boolean insert = singerService.insert(singer);

        if(insert) {
            jsonObject.put(Consts.CODE,1);
            jsonObject.put(Consts.MSG,"添加成功");
        }else {
            jsonObject.put(Consts.CODE,0);
            jsonObject.put(Consts.MSG,"添加失败");
        }
        return jsonObject;
    }

    // 修改歌手
    @PostMapping("update")
    public Object updateSinger(Singer singer) {
        JSONObject jsonObject = new JSONObject();

        boolean update = singerService.update(singer);

        if(update) {
            jsonObject.put(Consts.CODE,1);
            jsonObject.put(Consts.MSG,"修改成功");
        }else {
            jsonObject.put(Consts.CODE,0);
            jsonObject.put(Consts.MSG,"修改失败");
        }
        return jsonObject;
    }

    // 删除歌手
    @GetMapping("delete")
    public Object deleteSinger(Integer id) {
        JSONObject jsonObject = new JSONObject();

        boolean delete = singerService.delete(id);

        if(delete) {
            jsonObject.put(Consts.CODE,1);
            jsonObject.put(Consts.MSG,"删除成功");
        }else {
            jsonObject.put(Consts.CODE,0);
            jsonObject.put(Consts.MSG,"删除失败");
        }
        return jsonObject;
    }

    // 删除歌手们
    @GetMapping("deleteSingers")
    public Object deleteSingers(String ids) {
        JSONObject jsonObject = new JSONObject();

        List<String> singerIds = Arrays.asList(ids.split(","));
        boolean delete = singerService.deleteSingers(singerIds);

        if(delete) {
            jsonObject.put(Consts.CODE,1);
            jsonObject.put(Consts.MSG,"删除成功");
        }else {
            jsonObject.put(Consts.CODE,0);
            jsonObject.put(Consts.MSG,"删除失败");
        }
        return jsonObject;
    }

    // 根据主键查询歌手
    @GetMapping("selectByPrimaryKey")
    public Object selectByPrimaryKey(Integer id) {
        return singerService.selectByPrimaryKey(id);
    }

    // 查询所有歌手
    @GetMapping("allSinger")
    public Object allSinger() {
        return singerService.allSinger();
    }

    // 根据歌手名进行模糊查询
    @GetMapping("selectSingerOfName")
    public Object selectSingerOfName(String name) {
        return singerService.selectSingerOfName("%"+name+"%");
    }

    // 根据歌手性别进行查询
    @GetMapping("selectSingerOfSex")
    public Object selectSingerOfName(Integer sex) {
        return singerService.selectSingerOfSex(sex);
    }

    // 更新歌手图片
    // 将数据键为file的值存入到avatorFile中,对象类型为MultipartFile
    @PostMapping("updateSingerPic")
    public Object updateSingerPic(@RequestParam("file")MultipartFile avatorFile,@RequestParam("id") int id) {
        JSONObject jsonObject = new JSONObject();


        if(avatorFile.isEmpty()) {
            jsonObject.put(Consts.CODE,0);
            jsonObject.put(Consts.MSG,"上传失败");
            return jsonObject;
        }
        // 文件名为毫秒数 + 文件原始名
        String fileName = System.currentTimeMillis() + avatorFile.getOriginalFilename();
        // 文件路径
        String filePath =System.getProperty("user.dir") + System.getProperty("file.separator")+ "images"
                +System.getProperty("file.separator") + "singerPic";
        // 通过文件路径创建文件对象
        File file = new File(filePath);
        // 如果文件路径不存在
        if(!file.exists()) {
            // 创建
            file.mkdirs();
        }
        // 文件实际地址
        File dest = new File(filePath + System.getProperty("file.separator") + fileName);
        // 存储到数据库里的相对文件地址
        String storeAvatorPath = "/images/singerPic/"+fileName;
        // 上传
        // 如果上传成功,修改数据库数据,如果失败,返回上传失败
        try {
            avatorFile.transferTo(dest);
            Singer singer = new Singer();
            singer.setId(id);
            singer.setPic(storeAvatorPath);
            boolean update = singerService.update(singer);
            if (update) {
                jsonObject.put(Consts.CODE,1);
                jsonObject.put(Consts.MSG,"上传成功");
                return jsonObject;
            }else {
                jsonObject.put(Consts.CODE,0);
                jsonObject.put(Consts.MSG,"上传失败");
                return jsonObject;
            }
        } catch (IOException e) {
            jsonObject.put(Consts.CODE,0);
            jsonObject.put(Consts.MSG,"上传失败");
            return jsonObject;
        }finally {
            return jsonObject;
        }
    }

}
